package org.mango.jiayin.operater.operater.impl;

import java.util.List;
import java.util.Map;
import org.mango.jiayin.operater.operater.Operater;

/**
 * <p>
 * Title: getArr
 * </p>
 * <p>
 * Description: 数组取值算子 例如: getArr(1, arr)-->获取data中arr数组中下标为1的值返回
 * </p>
 *
 * @author ji'anyuan
 * @date 2018年3月10日
 */
public class GetArrOp implements Operater {

  @Override
  public String getName() {
    return "getArr";
  }

  @Override
  public Object calc(String[] opParames, Object data, Map<String, Object> nestValues) {
    Operater.checkParames(opParames, 2);

    Object[] values = Operater.getopParamesValues(opParames, data, nestValues);

    int index = -1;
    if (values[0] instanceof Integer) {
      index = (Integer) values[0];
    }
    if (values[0] instanceof String) {
      index = Integer.valueOf((String) values[0]);
    }

    if (index == -1) {
      return null;
    }

    if (values[1] instanceof List) {
      return ((List) values[1]).get(index);
    }

    if (values[1] instanceof Object[]) {
      return ((Object[]) values[1])[index];
    }

    if (values[1].getClass().isArray()) {
      return ((Object[]) values[1])[index];
    }

    return null;
  }
}
